package view;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;

import language.Strings;
import model.OperacoesArquivos;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import bean.DadosEntradaRNA;
import bean.PacoteF;
import util.Constantes;
import util.MergesortString;
import util.Util;

import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JRadioButton;

public class StartIndeterminados extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JTextArea jTextAreaNorm = null;
	private JTextArea jTextAreaOriginal = null;
	private JLabel lbMa = null;
	private JLabel lbMb = null;
	private JLabel lbTd = null;
	private JLabel lbAa = null;
	private JLabel lbAb = null;
	private JLabel lbNa = null;
	private JLabel lbTa = null;
	private JLabel lbTb = null;
	private JLabel lbSaidaIdeal = null;
	private JScrollPane jScrollPaneNorm = null;
	private JScrollPane jScrollPaneOriginal = null;
	private JScrollPane jScrollPaneList = null;
	private JList jList = null;
	private JLabel lbImagemZoom = null;
	private JLabel lbImagemPan1 = null;
	private JLabel lbImagemPan2 = null;
	private ChartPanel chartPanel = null;
	private JFreeChart jFreeChart = null;
	private XYSeriesCollection xyDataSet = null;  //  @jve:decl-index=0:
	private XYSeries series1 = null;  //  @jve:decl-index=0:
	private XYSeries series2 = null;  //  @jve:decl-index=0:
	private JLabel lbFluxoOriginal = null;
	private JLabel lbFluxoNorm = null;
	private JTextField tfMa = null;
	private JTextField tfMb = null;
	private JTextField tfAa = null;
	private JTextField tfAb = null;
	private JTextField tfTa = null;
	private JTextField tfTb = null;
	private JTextField tfTd = null;
	private JTextField tfNa = null;
	private JTextField tfSaidaIdeal = null;
	private JButton btCopiarParaTestes = null;
	private JButton btRecarregar = null;
	private JButton btAlterar = null;
	private JButton btSalvar = null;
	private JButton btRemover = null;
	private JButton btRemoveInvalidos = null;
	private JLabel lbQtd = null;
	private ImagemAmpliada ampliada = null;
	private ImagemAmpliada graficoAmpliado = null;
	private JTabbedPane jTabbedPane = null;
	private JTextField tfPesquisar = null;
	private DefaultListModel model = null;
	private DefaultListModel model_todos = null;
	private JRadioButton rbTodos = null;
	private JRadioButton rbT = null;
	private JRadioButton rbP = null;
	private JRadioButton rbM = null;
	private JRadioButton rbC = null;
	private JRadioButton rbO = null;
	private JPopupMenu jPopupMenu = null;
	private JMenuItem jMenuItemCopiar = null;  //  @jve:decl-index=0:
	private JMenuItem jMenuItemColar = null;  //  @jve:decl-index=0:
	private JMenuItem jMenuItemRecortar = null;  //  @jve:decl-index=0:
	private JMenuItem jMenuItemSelecionar = null;
	private JMenuItem jMenuItemSalvarComo = null;
	
	private boolean jPopMenuCopiar = false;
	private boolean jPopMenuColar = false;
	private boolean jPopMenuRecortar = false;
	private boolean jPopMenuSelecionar = false;
	private boolean jPopMenuSalvarComo = false;
	
	private static int CAMPO_SELECIONADO = 0;
	private static final int CAMPO_TF_PESQUISAR = 1;
	private static final int CAMPO_JLIST = 2;
	private static final int CAMPO_TA_ORIGINAL = 3;
	private static final int CAMPO_TA_NORMALIZADO = 4;	
	
	private JLabel lbItemCorrente = null;
	private JLabel lbItemDesc = null;
	private JLabel lbDe = null;
	
	public StartIndeterminados() {
		super();
		initialize();
		
		desabilitaCampos();
		carregaDadosIniciais();
	}

	private void initialize() {
		this.setSize(1045, 660);
		this.setContentPane(getJContentPane());
		this.setTitle(Strings.TEXT_BT_INDETERMINADOS);
		this.setResizable(false);
		this.setDefaultCloseOperation(HIDE_ON_CLOSE);
		this.setLocation(
						((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (this
								.getWidth() / 2)),
						((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this
								.getHeight() / 2)));
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
				Principal.JANELA_ABERTA = false;				
			}			
		});
		
		configuraFontesTF();
		configuraCores();
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			lbDe = new JLabel();
			lbDe.setBounds(new Rectangle(860, 580, 43, 15));
			lbDe.setText(Strings.TEXT_LABEL_DE.trim());
			lbDe.setHorizontalAlignment(SwingConstants.CENTER);
			lbItemDesc = new JLabel();
			lbItemDesc.setBounds(new Rectangle(680, 580, 68, 15));
			lbItemDesc.setText(Strings.TEXT_LABEL_ITEM+":");
			lbItemDesc.setHorizontalAlignment(SwingConstants.RIGHT);
			lbItemCorrente = new JLabel();
			lbItemCorrente.setBounds(new Rectangle(765, 580, 85, 15));
			lbItemCorrente.setText("");
			lbItemCorrente.setHorizontalAlignment(SwingConstants.CENTER);
			lbQtd = new JLabel();
			lbQtd.setBounds(new Rectangle(915, 580, 85, 15));
			lbQtd.setText("");
			lbQtd.setHorizontalAlignment(SwingConstants.CENTER);
			lbFluxoNorm = new JLabel();
			lbFluxoNorm.setBounds(new Rectangle(360, 11, 191, 15));
			lbFluxoNorm.setText(Strings.TEXT_LABEL_FLUXO_NORMALIZADO+":");
			lbFluxoOriginal = new JLabel();
			lbFluxoOriginal.setBounds(new Rectangle(17, 11, 160, 15));
			lbFluxoOriginal.setText(Strings.TEXT_LABEL_FLUXO_ORIGINAL+":");
			lbSaidaIdeal = new JLabel();
			lbSaidaIdeal.setBounds(new Rectangle(200, 520, 105, 15));
			lbTb = new JLabel();
			lbTb.setBounds(new Rectangle(370, 490, 43, 15));
			lbTa = new JLabel();
			lbTa.setBounds(new Rectangle(370, 460, 43, 15));
			lbNa = new JLabel();
			lbNa.setBounds(new Rectangle(540, 490, 43, 15));
			lbAb = new JLabel();
			lbAb.setBounds(new Rectangle(205, 490, 43, 15));
			lbAa = new JLabel();
			lbAa.setBounds(new Rectangle(205, 460, 43, 15));
			lbTd = new JLabel();
			lbTd.setBounds(new Rectangle(540, 460, 43, 15));
			lbMb = new JLabel();
			lbMb.setBounds(new Rectangle(60, 490, 43, 15));
			lbMa = new JLabel();
			lbMa.setBounds(new Rectangle(60, 460, 43, 15));
			
			lbSaidaIdeal.setText(Strings.TEXT_LABEL_SAIDA_IDEAL + ":");
			lbTb.setText(Strings.TEXT_LABEL_TB + ":");
			lbTa.setText(Strings.TEXT_LABEL_TA + ":");
			lbNa.setText(Strings.TEXT_LABEL_NA + ":");
			lbAb.setText(Strings.TEXT_LABEL_AB + ":");
			lbAa.setText(Strings.TEXT_LABEL_AA + ":");
			lbTd.setText(Strings.TEXT_LABEL_TD + ":");
			lbMb.setText(Strings.TEXT_LABEL_MB + ":");
			lbMa.setText(Strings.TEXT_LABEL_MA + ":");
			
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJTextAreaNorm(), null);
			jContentPane.add(getJTextAreaOriginal(), null);
			jContentPane.add(lbMa, null);
			jContentPane.add(lbMb, null);
			jContentPane.add(lbTd, null);
			jContentPane.add(lbAa, null);
			jContentPane.add(lbAb, null);
			jContentPane.add(lbNa, null);
			jContentPane.add(lbTa, null);
			jContentPane.add(lbTb, null);
			jContentPane.add(lbSaidaIdeal, null);
			jContentPane.add(getJScrollBarNorm(), null);
			jContentPane.add(getJScrollBarOriginal(), null);
			jContentPane.add(getJScrollBarList(), null);
			jContentPane.add(getjTabbedPane(), null);
			jContentPane.add(getChartPanel(), null);
			jContentPane.add(lbFluxoOriginal, null);
			jContentPane.add(lbFluxoNorm, null);
			jContentPane.add(getTfMa(), null);
			jContentPane.add(getTfMb(), null);
			jContentPane.add(getTfAa(), null);
			jContentPane.add(getTfAb(), null);
			jContentPane.add(getTfTa(), null);
			jContentPane.add(getTfTb(), null);
			jContentPane.add(getTfTd(), null);
			jContentPane.add(getTfNa(), null);
			jContentPane.add(getTfSaidaIdeal(), null);
			jContentPane.add(getBtAlterar(), null);
			jContentPane.add(getBtSalvar(), null);
			jContentPane.add(getBtRemover(), null);
			jContentPane.add(getBtCopiarParaTestes(), null);
			jContentPane.add(getBtRecarregar(), null);
			jContentPane.setBackground(Color.WHITE);
			jContentPane.add(getBtRemoveInvalidos(), null);
			jContentPane.add(lbQtd, null);
			jContentPane.add(getTfPesquisar(), null);
			jContentPane.add(getRbTodos(), null);
			jContentPane.add(getRbT(), null);
			jContentPane.add(getRbP(), null);
			jContentPane.add(getRbM(), null);
			jContentPane.add(getRbG(), null);
			jContentPane.add(getRbO(), null);
			jContentPane.add(lbItemCorrente, null);
			jContentPane.add(lbItemDesc, null);
			jContentPane.add(lbDe, null);
			
			createButtonGroup();
		}
		return jContentPane;
	}

	private ChartPanel getChartPanel(){
		if(chartPanel == null){
			chartPanel = new ChartPanel(getJFreeChart());
			chartPanel.setBounds(new Rectangle(360, 200, 320, 240));
			chartPanel.addMouseListener(new MouseListener() {
				@Override
				public void mouseClicked(MouseEvent e) {
					String selecionado = UtilitariosGUI.getNomeJList((String) getJList().getSelectedValue());
					
					if(graficoAmpliado == null){				
						graficoAmpliado = new ImagemAmpliada();
					}
					
					graficoAmpliado.setGrafico(selecionado, getJFreeChart());
					
					graficoAmpliado.setVisible(true);
					graficoAmpliado.setState(JFrame.NORMAL);
				}

				@Override
				public void mouseEntered(MouseEvent e) {
					
				}

				@Override
				public void mouseExited(MouseEvent e) {
					
				}

				@Override
				public void mousePressed(MouseEvent e) {
					
				}

				@Override
				public void mouseReleased(MouseEvent e) {
					
				}
				
			});
		}
		
		return chartPanel;
	}
	
	private JFreeChart getJFreeChart(){
		if(jFreeChart == null){
			jFreeChart = ChartFactory.createXYLineChart(
					Strings.TEXT_LABEL_PERFIL_MAG, Strings.TEXT_LABEL_TEMPO, Strings.TEXT_LABEL_VARIACAO_PERIODO, 
					getXYDataset(), PlotOrientation.VERTICAL, true, true, true);
			jFreeChart.setBorderVisible(true);
		}
		
		return jFreeChart;
	}
	
	private XYDataset getXYDataset() {
		if(xyDataSet  == null){
			xyDataSet = new XYSeriesCollection();
			xyDataSet.addSeries(getSeries1());
			xyDataSet.addSeries(getSeries2());
		}
		
		return xyDataSet;
	}

	private XYSeries getSeries1() {
		if (series1 == null) {
			series1 = new XYSeries(Strings.TEXT_LABEL_LACO1);
		}
		
		return series1;
	}

	private XYSeries getSeries2() {
		if (series2 == null) {
			series2 = new XYSeries(Strings.TEXT_LABEL_LACO2);
		}
		
		return series2;
	}


	private JTextField getTfMa() {
		if (tfMa == null) {
			tfMa = new JTextField();
			tfMa.setBounds(new Rectangle(110, 460, 70, 15));
			tfMa.setEditable(false);
			tfMa.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfMa;
	}

	private JTextField getTfMb() {
		if (tfMb == null) {
			tfMb = new JTextField();
			tfMb.setBounds(new Rectangle(110, 490, 70, 15));
			tfMb.setEditable(false);
			tfMb.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfMb;
	}

	private JTextField getTfAa() {
		if (tfAa == null) {
			tfAa = new JTextField();
			tfAa.setBounds(new Rectangle(257, 460, 90, 15));
			tfAa.setEditable(false);
			tfAa.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfAa;
	}

	private JTextField getTfAb() {
		if (tfAb == null) {
			tfAb = new JTextField();
			tfAb.setBounds(new Rectangle(257, 490, 90, 15));
			tfAb.setEditable(false);
			tfAb.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfAb;
	}

	private JTextField getTfTa() {
		if (tfTa == null) {
			tfTa = new JTextField();
			tfTa.setBounds(new Rectangle(422, 460, 90, 15));
			tfTa.setEditable(false);
			tfTa.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfTa;
	}

	private JTextField getTfTb() {
		if (tfTb == null) {
			tfTb = new JTextField();
			tfTb.setBounds(new Rectangle(422, 490, 90, 15));
			tfTb.setEditable(false);
			tfTb.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfTb;
	}

	private JTextField getTfTd() {
		if (tfTd == null) {
			tfTd = new JTextField();
			tfTd.setBounds(new Rectangle(590, 460, 90, 15));
			tfTd.setEditable(false);
			tfTd.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfTd;
	}

	private JTextField getTfNa() {
		if (tfNa == null) {
			tfNa = new JTextField();
			tfNa.setBounds(new Rectangle(590, 490, 90, 15));
			tfNa.setEditable(false);
			tfNa.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfNa;
	}

	private JTextField getTfSaidaIdeal() {
		if (tfSaidaIdeal == null) {
			tfSaidaIdeal = new JTextField();
			tfSaidaIdeal.setBounds(new Rectangle(330, 520, 50, 15));
			tfSaidaIdeal.setEditable(false);
			tfSaidaIdeal.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {	
					if(e.getKeyCode() == KeyEvent.VK_ENTER){
						eventoSalvar();
					}
				}
			});
		}
		return tfSaidaIdeal;
	}
	
	private void configuraFontesTF(){
		Font font = new Font(Font.SANS_SERIF, Font.PLAIN, 11);
		getTfMa().setFont(font);
		getTfMb().setFont(font);
		getTfAa().setFont(font);
		getTfAb().setFont(font);
		getTfTa().setFont(font);
		getTfTb().setFont(font);
		getTfTd().setFont(font);
		getTfNa().setFont(font);
		getTfSaidaIdeal().setFont(font);
		
		lbImagemZoom.setFont(font);
		lbImagemPan1.setFont(font);
		lbImagemPan2.setFont(font);
	}
	
	private void configuraCores(){
		lbFluxoNorm.setForeground(Constantes.COR_AZUL_MARINHO);
		lbFluxoOriginal.setForeground(Constantes.COR_AZUL_MARINHO);
		
		lbMa.setForeground(Constantes.COR_AZUL_MARINHO);
		lbMb.setForeground(Constantes.COR_AZUL_MARINHO);
		lbAa.setForeground(Constantes.COR_AZUL_MARINHO);
		lbAb.setForeground(Constantes.COR_AZUL_MARINHO);
		lbTa.setForeground(Constantes.COR_AZUL_MARINHO);
		lbTb.setForeground(Constantes.COR_AZUL_MARINHO);
		lbTd.setForeground(Constantes.COR_AZUL_MARINHO);
		lbNa.setForeground(Constantes.COR_AZUL_MARINHO);
		lbSaidaIdeal.setForeground(Constantes.COR_AZUL_MARINHO);
	}
	
	private JLabel getLbImagemZoom(){
		if(lbImagemZoom == null){
			lbImagemZoom = new JLabel();
			lbImagemZoom.setSize(280, 233);
		}
				
		lbImagemZoom.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		lbImagemZoom.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		lbImagemZoom.setHorizontalAlignment(SwingConstants.CENTER);
		lbImagemZoom.addMouseListener(new MouseListener() {			
			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				String nome = UtilitariosGUI.getNomeJList((String) getJList().getSelectedValue());
				
				if(ampliada == null){				
					ampliada = new ImagemAmpliada();
				} 
				
				ampliada.setImagem(nome, "zoom", true);
								
				ampliada.setVisible(true);
				ampliada.setState(JFrame.NORMAL);
			}
		});		
		
		return lbImagemZoom;
	}
	
	private JLabel getLbImagemPan1(){
		if(lbImagemPan1 == null){
			lbImagemPan1 = new JLabel();
			lbImagemPan1.setSize(280, 233);
		}
				
		lbImagemPan1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		lbImagemPan1.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		lbImagemPan1.setHorizontalAlignment(SwingConstants.CENTER);
		lbImagemPan1.addMouseListener(new MouseListener() {			
			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				String nome = UtilitariosGUI.getNomeJList((String) getJList().getSelectedValue());
				
				if(ampliada == null){				
					ampliada = new ImagemAmpliada();
				} 
				
				ampliada.setImagem(nome, "pan1", true);
								
				ampliada.setVisible(true);
				ampliada.setState(JFrame.NORMAL);
			}
		});		
		
		return lbImagemPan1;
	}
	
	private JLabel getLbImagemPan2(){
		if(lbImagemPan2 == null){
			lbImagemPan2 = new JLabel();
			lbImagemPan2.setSize(280, 233);
		}
				
		lbImagemPan2.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		lbImagemPan2.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		lbImagemPan2.setHorizontalAlignment(SwingConstants.CENTER);
		lbImagemPan2.addMouseListener(new MouseListener() {			
			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				String nome = UtilitariosGUI.getNomeJList((String) getJList().getSelectedValue());
				
				if(ampliada == null){				
					ampliada = new ImagemAmpliada();
				} 
				
				ampliada.setImagem(nome, "pan2", true);
								
				ampliada.setVisible(true);
				ampliada.setState(JFrame.NORMAL);
			}
		});		
		
		return lbImagemPan2;
	}
	
	private JButton getBtAlterar() {
		if (btAlterar == null) {
			ImageIcon icon = UtilitariosGUI.criaIconDaImagem(Constantes.ICONE_MODIFY, 24, 24);
			String conteudo = Strings.TEXT_LABEL_HABILITA_CAMPOS;
			
			btAlterar = new JButton();
			btAlterar.setBounds(new Rectangle(250, 570, 40, 40));
//			btAlterar.setText("Alterar");
			btAlterar.setIcon(icon);
			btAlterar.setToolTipText(conteudo);
			btAlterar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {	
					if(getJList().isSelectionEmpty()){
						JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_SELECIONE_ITEM_LISTA, 
								Strings.TEXT_LABEL_ATENCAO, JOptionPane.WARNING_MESSAGE);
						return;
					}
					
					habilitaCampos();
					
					btAlterar.setEnabled(false);
					getBtRemover().setEnabled(false);
				}
			});
		}
		return btAlterar;
	}
	
	private JButton getBtRecarregar(){
		if(btRecarregar == null){
			ImageIcon iconRefresh = UtilitariosGUI.criaIconDaImagem(Constantes.ICONE_REFRESH, 24, 24);
			String conteudo = Strings.TEXT_LABEL_RECARREGA;
			
			btRecarregar = new JButton();
			btRecarregar.setBounds(new Rectangle(20, 570, 40, 40));
			btRecarregar.setIcon(iconRefresh);
			btRecarregar.setToolTipText(conteudo);
			btRecarregar.addActionListener(new java.awt.event.ActionListener(){
				@Override
				public void actionPerformed(ActionEvent e) {
					carregaDadosIniciais();					
				}				
			});
		}
		
		return btRecarregar;
	}
	
	private JButton getBtCopiarParaTestes(){
		if(btCopiarParaTestes == null){
			ImageIcon icon = UtilitariosGUI.criaIconDaImagem(Constantes.ICONE_COPY, 24, 24);
			String conteudo = Strings.TEXT_BT_COPIAR_ITEM_SELECIONADO_PARA_TESTES;
			
			btCopiarParaTestes = new JButton();
			btCopiarParaTestes.setBounds(new Rectangle(180, 570, 40, 40));
//			btCopiarParaTestes.setText("Copiar p/ Testes");
			btCopiarParaTestes.setIcon(icon);
			btCopiarParaTestes.setToolTipText(conteudo);
			btCopiarParaTestes.addActionListener(new java.awt.event.ActionListener(){
				@Override
				public void actionPerformed(ActionEvent e) {
					if(getJList().isSelectionEmpty()){
						JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_SELECIONE_ITEM_LISTA, 
								Strings.TEXT_LABEL_ATENCAO, JOptionPane.WARNING_MESSAGE);
						return;
					}
					
					String nome = (String) getJList().getSelectedValue();
					
					Object[] options = {Strings.TEXT_OP_SIM, Strings.TEXT_OP_NAO};					
					int resp = JOptionPane.showOptionDialog(null, Strings.TEXT_BT_COPIAR_ITEM_MSG + nome + Strings.TEXT_BT_COPIAR_ITEM_SELECIONADO_PARA_TESTES, 
							Strings.TITULO_JOPTION_PANE, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
							null, options, options[0]);
					
					if(resp == JOptionPane.YES_OPTION){
						int indexSelecionado = getJList().getSelectedIndex();
						
						File origemFileCSV = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_CSV, nome + Constantes.EXTENSAO_CSV);
						File destinoFileCSV = new File(Constantes.DIRETORIO_PERFIL_TESTES_RNA_COLETA_DADOS, nome + Constantes.EXTENSAO_CSV);
						
						File origemFileNorm = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_FLUXO_NORMALIZADO, nome + Constantes.EXTENSAO_TXT);
						File destinoFileNorm = new File(Constantes.DIRETORIO_PERFIL_TESTES_RNA_FLUXO_NORMALIZADO, nome + Constantes.EXTENSAO_TXT);
						
						File origemFileOriginal = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_FLUXO_ORIGINAL, nome + Constantes.EXTENSAO_TXT);
						File destinoFileOriginal = new File(Constantes.DIRETORIO_PERFIL_TESTES_RNA_FLUXO_ORIGINAL, nome + Constantes.EXTENSAO_TXT);
						
						File origemFileImgZoom = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_ZOOM, nome + Constantes.EXTENSAO_JPG);
						File destinoFileImgZoom = new File(Constantes.DIRETORIO_PERFIL_TESTES_RNA_IMAGENS_ZOOM, nome + Constantes.EXTENSAO_JPG);
						
						File origemFileImgPan1 = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_PAN_1, nome + Constantes.EXTENSAO_JPG);
						File destinoFileImgPan1 = new File(Constantes.DIRETORIO_PERFIL_TESTES_RNA_IMAGENS_PAN_1, nome + Constantes.EXTENSAO_JPG);
						
						File origemFileImgPan2 = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_PAN_2, nome + Constantes.EXTENSAO_JPG);
						File destinoFileImgPan2 = new File(Constantes.DIRETORIO_PERFIL_TESTES_RNA_IMAGENS_PAN_2, nome + Constantes.EXTENSAO_JPG);
						
						if(!OperacoesArquivos.COPIA_ARQUIVO(origemFileCSV, destinoFileCSV)){
							System.err.println("Could not copy file: " + origemFileCSV.getAbsolutePath());
						} if(!OperacoesArquivos.COPIA_ARQUIVO(origemFileNorm, destinoFileNorm)){
							System.err.println("Could not copy file: " + origemFileNorm.getAbsolutePath());
						} if(!OperacoesArquivos.COPIA_ARQUIVO(origemFileOriginal, destinoFileOriginal)){
							System.err.println("Could not copy file: " + origemFileOriginal.getAbsolutePath());
						} if(!OperacoesArquivos.COPIA_ARQUIVO(origemFileImgZoom, destinoFileImgZoom)){
							System.err.println("Could not copy file: " + origemFileImgZoom.getAbsolutePath());
						} if(!OperacoesArquivos.COPIA_ARQUIVO(origemFileImgPan1, destinoFileImgPan1)){
							System.err.println("Could not copy file: " + origemFileImgPan1.getAbsolutePath());
						} if(!OperacoesArquivos.COPIA_ARQUIVO(origemFileImgPan2, destinoFileImgPan2)){
							System.err.println("Could not copy file: " + origemFileImgPan2.getAbsolutePath());
						}
												
						removeItem(true, nome);
						
						if(model_todos != null){
							model_todos.removeElement(nome);
							
							if(getJList().isSelectionEmpty()){
								if(indexSelecionado == model_todos.getSize()){
									getJList().setSelectedIndex(indexSelecionado - 1);
								} else{
									getJList().setSelectedIndex(indexSelecionado);
								}
							}
							
							lbQtd.setText(String.valueOf(model_todos.size()));
						}
						
						if(!getRbTodos().isSelected()){
							if(model != null){
								model.removeElementAt(indexSelecionado);
								
								if(getJList().isSelectionEmpty()){
									if(indexSelecionado == model.getSize()){
										getJList().setSelectedIndex(indexSelecionado - 1);
									} else{
										getJList().setSelectedIndex(indexSelecionado);
									}
								}
	
								lbQtd.setText(String.valueOf(model.size()));
							}
						}
					}
				}				
			});
		}
		
		return btCopiarParaTestes;
	}
	
	private JButton getBtSalvar() {
		if (btSalvar == null) {
			ImageIcon iconSave = UtilitariosGUI.criaIconDaImagem(Constantes.ICONE_SAVE, 24, 24);
			
			btSalvar = new JButton();
			btSalvar.setBounds(new Rectangle(320, 570, 40, 40));
//			btSalvar.setText("Salvar");
			btSalvar.setIcon(iconSave);
			btSalvar.setToolTipText(Strings.TEXT_LABEL_SALVAR_DADOS);
			btSalvar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					eventoSalvar();
				}
			});
		}
		return btSalvar;
	}

	private boolean checaDadosJTextFields(){
		if(getTfAa().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfAb().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfMa().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfMb().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfNa().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfTa().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfTb().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfTd().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		} if(getTfSaidaIdeal().getText().equals("")){
			JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_VALOR_INVALIDO);
			return false;
		}
		
		return true;
	}
	
	private void eventoSalvar(){
		int index = getJList().getSelectedIndex();
		String selecionado = UtilitariosGUI.getNomeJList((String) getJList().getSelectedValue());
		
		if(checaDadosJTextFields()){				
			DadosEntradaRNA input = new DadosEntradaRNA();
			input.setMa(Integer.parseInt(getTfMa().getText()));
			input.setMb(Integer.parseInt(getTfMb().getText()));
			input.setAa(Integer.parseInt(getTfAa().getText()));
			input.setAb(Integer.parseInt(getTfAb().getText()));
			input.setTa(Integer.parseInt(getTfTa().getText()));
			input.setTb(Integer.parseInt(getTfTb().getText()));
			input.setTd(Integer.parseInt(getTfTd().getText()));
			input.setNa(Integer.parseInt(getTfNa().getText()));
			input.setSaidaIdeal(Integer.parseInt(getTfSaidaIdeal().getText()));
								
			String linha = OperacoesArquivos.geraLinha(input);
			File file = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_CSV, selecionado + Constantes.EXTENSAO_CSV);
			OperacoesArquivos.salvaDadosArquivoTexto(linha, file.getAbsolutePath(), false);
			
			String renomeado = OperacoesArquivos.RENOMEIA_ARQUIVOS(
					selecionado, input.getSaidaIdeal(), Constantes.INDETERMINADOS);
			
			if(getRbTodos().isSelected()){
				model_todos.setElementAt(renomeado, index);
			} else{
				model.setElementAt(renomeado, index);
			}		
		}
		
		desabilitaCampos();
		getBtAlterar().setEnabled(true);
		getBtRemover().setEnabled(true);
		
		getJList().setSelectedIndex(index);
	}
		
	private JButton getBtRemover() {
		if (btRemover == null) {
			ImageIcon iconDelete = UtilitariosGUI.criaIconDaImagem(Constantes.ICONE_DELETE, 24, 24);
			String conteudo = Strings.TEXT_LABEL_REMOVE;
			
			btRemover = new JButton();
			btRemover.setBounds(new Rectangle(390, 570, 40, 40));
//			btRemover.setText("Remover");
			btRemover.setIcon(iconDelete);
			btRemover.setToolTipText(conteudo);
			btRemover.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if(getJList().isSelectionEmpty()){
						JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_SELECIONE_ITEM_LISTA,
								Strings.TEXT_LABEL_ATENCAO, JOptionPane.WARNING_MESSAGE);						
						return;
					}					
					
					String selecionado = UtilitariosGUI.getNomeJList((String) getJList().getSelectedValue());
					int indexSelecionado = getJList().getSelectedIndex();
					
					Object[] options = {Strings.TEXT_OP_SIM, Strings.TEXT_OP_NAO};					
					int resp = JOptionPane.showOptionDialog(null, Strings.TEXT_LABEL_PERGUNTA_REMOVER + selecionado +" ?", 
							Strings.TITULO_JOPTION_PANE, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
							null, options, options[0]);
					
					if(resp == JOptionPane.YES_OPTION){
						removeItem(false, selecionado);
						
						if(model_todos != null){
							model_todos.removeElement(selecionado);
							
							if(getJList().isSelectionEmpty()){
								if(indexSelecionado == model_todos.getSize()){
									getJList().setSelectedIndex(indexSelecionado - 1);
								} else{
									getJList().setSelectedIndex(indexSelecionado);
								}
							}
							
							lbQtd.setText(String.valueOf(model_todos.size()));
						}
						
						if(!getRbTodos().isSelected()){
							if(model != null){
								model.removeElementAt(indexSelecionado);
								
								if(getJList().isSelectionEmpty()){
									if(indexSelecionado == model.getSize()){
										getJList().setSelectedIndex(indexSelecionado - 1);
									} else{
										getJList().setSelectedIndex(indexSelecionado);
									}
								}

								lbQtd.setText(model.size() + "");
							}
						}
						
						desabilitaCampos();
						getBtAlterar().setEnabled(true);
						
//						JOptionPane.showMessageDialog(null, "Fluxo "+ selecionado +
//								" removido com Sucesso!", "", JOptionPane.INFORMATION_MESSAGE);
					}
				}
			});
		}
		return btRemover;
	}

	private JButton getBtRemoveInvalidos() {
		if (btRemoveInvalidos == null) {
			ImageIcon iconRefresh = UtilitariosGUI.criaIconDaImagem(Constantes.ICONE_DELETE_ALL, 24, 24);
			String conteudo = Strings.TEXT_LABEL_REMOVE_SEM_IMAGEM;
			
			btRemoveInvalidos = new JButton();
			btRemoveInvalidos.setBounds(new Rectangle(550, 570, 40, 40));
//			btRemoveInvalidos.setText("Remover Arquivos Sem Imagem");
			btRemoveInvalidos.setIcon(iconRefresh);
			btRemoveInvalidos.setToolTipText(conteudo);
			btRemoveInvalidos.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Object[] options = {Strings.TEXT_OP_SIM, Strings.TEXT_OP_NAO};					
					
					int resp = JOptionPane.showOptionDialog(null, Strings.TEXT_LABEL_REMOVE_SEM_IMAGEM_MSG, 
							Strings.TITULO_JOPTION_PANE, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
							null, options, options[0]);
					
					if(resp == JOptionPane.YES_OPTION){
						excluirSemImagem();
						carregaDadosIniciais();
//						carregaDados(TODOS);
						
						if(model_todos.size() > 0){
							getJList().setSelectedIndex(0);
						}
						
						JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_ARQUIVOS_REMOVIDOS_MSG);
					}
				}
			});
		}
		return btRemoveInvalidos;
	}
	
	private JTextArea getJTextAreaNorm() {
		if (jTextAreaNorm == null) {
			jTextAreaNorm = new JTextArea();
			jTextAreaNorm.setBounds(new Rectangle(360, 15, 290, 147));
			jTextAreaNorm.setEditable(false);
		}
		
		return jTextAreaNorm;
	}

	private JScrollPane getJScrollBarNorm() {
		if (jScrollPaneNorm == null) {
			jScrollPaneNorm = new JScrollPane(getJTextAreaNorm());
			jScrollPaneNorm.setBounds(new Rectangle(360, 35, 320, 147));
		}
		jScrollPaneNorm.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		jScrollPaneNorm.setPreferredSize(new Dimension(3, 18));
		jScrollPaneNorm.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		
		return jScrollPaneNorm;
	}

	private JTextArea getJTextAreaOriginal() {
		if (jTextAreaOriginal  == null) {
			jTextAreaOriginal = new JTextArea();
			jTextAreaOriginal.setBounds(new Rectangle(17, 15, 290, 147));
			jTextAreaOriginal.setEditable(false);
		}
				
		return jTextAreaOriginal;
	}

	private JScrollPane getJScrollBarOriginal() {
		if (jScrollPaneOriginal  == null) {
			jScrollPaneOriginal = new JScrollPane(getJTextAreaOriginal());
			jScrollPaneOriginal.setBounds(new Rectangle(17, 35, 320, 147));
		}
		jScrollPaneOriginal.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		jScrollPaneOriginal.setPreferredSize(new Dimension(3, 18));
		jScrollPaneOriginal.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		
		return jScrollPaneOriginal;
	}

	private JScrollPane getJScrollBarList() {
		if (jScrollPaneList == null) {
			jScrollPaneList = new JScrollPane(getJList());
		}
		
		jScrollPaneList.setBounds(new Rectangle(700, 105, 322, 460));
		jScrollPaneList.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		jScrollPaneList.setPreferredSize(new Dimension(3, 18));
		jScrollPaneList.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		
		return jScrollPaneList;
	}
	
	private JList getJList() {
		if (jList == null) {			
			jList = new JList();
			jList.setBounds(new Rectangle(700, 15, 302, 606));
			jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			jList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
					if(!e.getValueIsAdjusting()){
						if(!jList.isSelectionEmpty()){							
							String nome = UtilitariosGUI.getNomeJList((String) jList.getSelectedValue());
							
							lbItemCorrente.setText(String.valueOf(jList.getSelectedIndex()+1));
							
							mostraDadosEntradaRNA(nome);
							listarFluxoNorm(nome);
							listarFluxoOriginal(nome);
							mostraImagem(nome);
							plotaGrafico(nome);							
							getTfPesquisar().setText(nome);							
						}
					}
				}
			});
			jList.addMouseMotionListener(new MouseAdapter() {
				@Override
				public void mouseMoved(MouseEvent e) {
					JList list = (JList) e.getSource();
//					ListModel model = list.getModel();
					int index = list.locationToIndex(e.getPoint());
					
					if(index > -1){
						list.setToolTipText(null);
//						String text = (String) model.getElementAt(index);
//						list.setToolTipText(text);
						list.setToolTipText(String.valueOf(index+1));
					}
				}
			});
			jList.addKeyListener(new KeyListener() {				
				@Override
				public void keyTyped(KeyEvent e) {					
				}
				
				@Override
				public void keyReleased(KeyEvent e) {					
				}
				
				@Override
				public void keyPressed(KeyEvent e) {
					if(e.getKeyCode() == KeyEvent.VK_DELETE){
						String selecionado = UtilitariosGUI.getNomeJList((String) getJList().getSelectedValue());
						int indexSelecionado = getJList().getSelectedIndex();
						
						Object[] options = {Strings.TEXT_OP_SIM, Strings.TEXT_OP_NAO};					
						
						int resp = JOptionPane.showOptionDialog(null, Strings.TEXT_LABEL_PERGUNTA_REMOVER + selecionado +" ?", 
								Strings.TITULO_JOPTION_PANE, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
								null, options, options[0]);			
												
						if(resp == JOptionPane.YES_OPTION){
							removeItem(false, selecionado);
							
							if(model_todos != null){
								model_todos.removeElement(selecionado);
								
								if(getJList().isSelectionEmpty()){
									if(indexSelecionado == model_todos.getSize()){
										getJList().setSelectedIndex(indexSelecionado - 1);
									} else{
										getJList().setSelectedIndex(indexSelecionado);
									}
								}
								
								lbQtd.setText(model_todos.size() + "");
							}
							
							if(!getRbTodos().isSelected()){
								if(model != null){
									model.removeElementAt(indexSelecionado);
									
									if(getJList().isSelectionEmpty()){
										if(indexSelecionado == model.getSize()){
											getJList().setSelectedIndex(indexSelecionado - 1);
										} else{
											getJList().setSelectedIndex(indexSelecionado);
										}
									}
	
									lbQtd.setText(model.size() + "");
								}
							}
														
							desabilitaCampos();
							getBtAlterar().setEnabled(true);
						}
					} else if(e.getKeyCode() == KeyEvent.VK_ENTER){
						if(getJList().isSelectionEmpty()){
							JOptionPane.showMessageDialog(null, Strings.TEXT_LABEL_SELECIONE_ITEM_LISTA, 
									Strings.TEXT_LABEL_ATENCAO, JOptionPane.WARNING_MESSAGE);
							return;
						}
						
						habilitaCampos();
						getBtAlterar().setEnabled(false);
						getBtRemover().setEnabled(false);
					}
				}
			});
		}
		
		return jList;
	}

	private void habilitaCampos(){
		getTfMa().setEditable(true);
		getTfMb().setEditable(true);
		getTfAa().setEditable(true);
		getTfAb().setEditable(true);
		getTfTa().setEditable(true);
		getTfTb().setEditable(true);
		getTfTd().setEditable(true);
		getTfNa().setEditable(true);
		getTfSaidaIdeal().setEditable(true);
		
		getBtSalvar().setEnabled(true);
		getJList().setEnabled(false);
	}
	
	private void desabilitaBotoes(){
		getBtAlterar().setEnabled(false);
		getBtCopiarParaTestes().setEnabled(false);
		getBtRemoveInvalidos().setEnabled(false);
		getBtRemover().setEnabled(false);
		getBtSalvar().setEnabled(false);
	}
	
	private void desabilitaCampos(){
		getTfMa().setEditable(false);
		getTfMb().setEditable(false);
		getTfAa().setEditable(false);
		getTfAb().setEditable(false);
		getTfTa().setEditable(false);
		getTfTb().setEditable(false);
		getTfTd().setEditable(false);
		getTfNa().setEditable(false);
		getTfSaidaIdeal().setEditable(false);
		
		getBtSalvar().setEnabled(false);
		getJList().setEnabled(true);
	}
	
	private void limparTodosCampos(){
		getTfMa().setText("");
		getTfMb().setText("");
		getTfAa().setText("");
		getTfAb().setText("");
		getTfTa().setText("");
		getTfTb().setText("");
		getTfTd().setText("");
		getTfNa().setText("");
		getTfSaidaIdeal().setText("");
		getTfPesquisar().setText("");
		
		getJTextAreaNorm().setText("");
		getJTextAreaOriginal().setText("");
		
		lbImagemZoom.setIcon(null);
		lbImagemZoom.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		lbImagemPan1.setIcon(null);
		lbImagemPan1.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		lbImagemPan2.setIcon(null);
		lbImagemPan2.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		getSeries1().clear();
		getSeries2().clear();
	}
	
	public static String[] criaListFromDir(File diretorio){
		List<String> conteudoList = null;
		String[] conteudoString = null;
		
		if(diretorio.isDirectory()){
			String[] array = diretorio.list();
			conteudoList = new ArrayList<String>();
			       
			for (String nomeArquivo : array) {
				if(nomeArquivo.startsWith("E")){
					nomeArquivo = nomeArquivo.split(".txt")[0];
					conteudoList.add(nomeArquivo);
				}
			}
		}
				
		if(conteudoList != null){
			conteudoString = new String[conteudoList.size()];
			conteudoList.toArray(conteudoString);	
		}
		
		return conteudoString;
	}
	
	private void carregaDadosIniciais(){
		limparTodosCampos();

		String[] listDir = OperacoesArquivos.criaListFromDir(
				Constantes.DIRETORIO_PERFIL_INDETERMINADOS_CSV, Constantes.EXTENSAO_CSV);
		
//		String[] listDir = OperacoesArquivos.criaListFromDir(
//				Constantes.DIRETORIO_PERFIL_INDETERMINADOS_REAL, Constantes.EXTENSAO_TXT);

		model_todos = new DefaultListModel();
		
		if(listDir != null){
			MergesortString mergesort = new MergesortString();
			mergesort.sort(listDir);
			
			getJList().removeAll();
			getJList().updateUI();		
			model_todos.removeAllElements();
			
			for (int i = 0; i < listDir.length; i++) {
				model_todos.addElement(listDir[i].toString().toUpperCase());
			}
			
			if(model_todos.size() == 0){
				desabilitaBotoes();
			}
		} else{
			getRbTodos().setEnabled(false);
			getRbT().setEnabled(false);
			getRbP().setEnabled(false);
			getRbM().setEnabled(false);
			getRbG().setEnabled(false);
			getRbO().setEnabled(false);
		}
		
		carregaDados(Strings.TEXT_LABEL_TODOS);
	}
	
	private void carregaDados(String tipo){			
		if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_TODOS)){
			getRbTodos().setSelected(true);
			
			if(model_todos.size() == 0){
				getBtRemoveInvalidos().setEnabled(false);
			}
			
			getJList().setModel(model_todos);
			lbQtd.setText(String.valueOf(model_todos.size()));
		} else{
			model = new DefaultListModel();
			model.removeAllElements();
			 
			if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_T)){
				getRbT().setSelected(true);
				model = UtilitariosGUI.selecionaPorTipo(model_todos, tipo);			
			} else if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_P)){
				getRbP().setSelected(true);
				model = UtilitariosGUI.selecionaPorTipo(model_todos, tipo);
			} else if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_M)){
				getRbM().setSelected(true);
				model = UtilitariosGUI.selecionaPorTipo(model_todos, tipo);
			} else if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_G)){
				getRbG().setSelected(true);
				model = UtilitariosGUI.selecionaPorTipo(model_todos, tipo);
			} else if(tipo.equalsIgnoreCase(Strings.TEXT_LABEL_O)){
				getRbO().setSelected(true);
				model = UtilitariosGUI.selecionaPorTipo(model_todos, tipo);
			}
			
			if(model.size() == 0){
				getBtRemoveInvalidos().setEnabled(false);
			}
			
			getJList().setModel(model);
			lbQtd.setText(String.valueOf(model.size()));
		}
	}
	
	private void listarFluxoNorm(String pathArquivo){
		File file = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_FLUXO_NORMALIZADO, 
				pathArquivo + Constantes.EXTENSAO_TXT);
		
		StringBuffer buffer = UtilitariosGUI.LISTAR_FLUXO(file);
		
		if(buffer != null){
			getJTextAreaNorm().setText(buffer.toString());
		} else{
			getJTextAreaNorm().setText("");
		}
	}
	
	private void listarFluxoOriginal(String pathArquivo){
		File file = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_FLUXO_ORIGINAL, 
				pathArquivo + Constantes.EXTENSAO_TXT);
		
		StringBuffer buffer = UtilitariosGUI.LISTAR_FLUXO(file);
		
		if(buffer != null){			
			getJTextAreaOriginal().setText(buffer.toString());
		} else{
			getJTextAreaOriginal().setText("");
		}
	}
	
	private void plotaGrafico(String nome){
		File file = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_FLUXO_NORMALIZADO, nome + Constantes.EXTENSAO_TXT);
		if(file.exists()){
			String nomeDoArquivo = file.getAbsolutePath();
			
			List<String> conteudo = OperacoesArquivos.lerTxt(nomeDoArquivo);
			List<PacoteF> fluxos = new ArrayList<PacoteF>();
			
			for (String item : conteudo) {
				if(item.startsWith("F")){
					fluxos.add(new PacoteF(item));
				}
			}
			
			plotarPerfil(fluxos);
		} else{
			getSeries1().clear();
			getSeries2().clear();
		}
	}
	
	private void plotarPerfil(List<PacoteF> fluxos){
		getSeries1().clear();
		getSeries2().clear();
		int offset = fluxos.get(0).getTempo();
		
		for (int i = 0; i < fluxos.size(); i++) {
			getSeries1().add(fluxos.get(i).getTempo() - offset, fluxos.get(i).getCampoLaco1());
			getSeries2().add(fluxos.get(i).getTempo() - offset, fluxos.get(i).getCampoLaco2());
		}
	}
	
	private void mostraImagem(String nome){
		File fileZoom = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_ZOOM, nome + Constantes.EXTENSAO_JPG);
		File filePan1 = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_PAN_1, nome + Constantes.EXTENSAO_JPG);
		File filePan2 = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_PAN_2, nome + Constantes.EXTENSAO_JPG);
		
		ImageIcon iconZoom = UtilitariosGUI.criaIconDaImagem(fileZoom);
		ImageIcon iconPan1 = UtilitariosGUI.criaIconDaImagem(filePan1);
		ImageIcon iconPan2 = UtilitariosGUI.criaIconDaImagem(filePan2);
				
		lbImagemZoom.setIcon(iconZoom);
		lbImagemPan1.setIcon(iconPan1);
		lbImagemPan2.setIcon(iconPan2);
		
		if(iconZoom == null){
			lbImagemZoom.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		} if(iconPan1 == null){
			lbImagemPan1.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		} if(iconPan2 == null){
			lbImagemPan2.setText(Strings.TEXT_LABEL_NENHUMA_IMAGEM_SELECIONADA);
		}
		
	}
	
	private void mostraDadosEntradaRNA(String pathArquivo){
		File file = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_CSV, pathArquivo + Constantes.EXTENSAO_CSV);
		DadosEntradaRNA input = Util.getDadosEntradaRNA(file);
		
		if(input == null){
			return;
		}
		
		getTfMa().setText(String.valueOf(input.getMa()));
		getTfMb().setText(String.valueOf(input.getMb()));
		getTfAa().setText(String.valueOf(input.getAa()));
		getTfAb().setText(String.valueOf(input.getAb()));
		getTfTa().setText(String.valueOf(input.getTa()));
		getTfTb().setText(String.valueOf(input.getTb()));
		getTfTd().setText(String.valueOf(input.getTd()));
		getTfNa().setText(String.valueOf(input.getNa()));
		getTfSaidaIdeal().setText(String.valueOf(input.getSaidaIdeal()));
	}
	
	private void removeItem(boolean isTeste, String nomeItem){
		File fileCSV = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_CSV, nomeItem + Constantes.EXTENSAO_CSV);
		File fileNorm = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_FLUXO_NORMALIZADO, nomeItem + Constantes.EXTENSAO_TXT);
		File fileOriginal = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_FLUXO_ORIGINAL, nomeItem + Constantes.EXTENSAO_TXT);
		File fileZoomJPG = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_ZOOM, nomeItem + Constantes.EXTENSAO_JPG);
		File filePan1JPG = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_PAN_1, nomeItem + Constantes.EXTENSAO_JPG);
		File filePan2JPG = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_PAN_2, nomeItem + Constantes.EXTENSAO_JPG);
		File fileMetro = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_METROLOGICO, nomeItem + Constantes.EXTENSAO_TXT);
		File fileRNA = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_RNA, nomeItem + Constantes.EXTENSAO_TXT);
		File fileReal = new File(Constantes.DIRETORIO_PERFIL_INDETERMINADOS_REAL, nomeItem + Constantes.EXTENSAO_TXT);
		
		if(fileCSV.exists()){
			fileCSV.delete();
		} if(fileNorm.exists()){
			fileNorm.delete();
		} if(fileOriginal.exists()){
			fileOriginal.delete();
		} if(fileZoomJPG.exists()){
			fileZoomJPG.delete();
		} if(filePan1JPG.exists()){
			filePan1JPG.delete();
		} if(filePan2JPG.exists()){
			filePan2JPG.delete();
		} if(fileMetro.exists()){
			fileMetro.delete();
		} if(fileRNA.exists()){
			fileRNA.delete();
		} if(fileReal.exists()){
			fileReal.delete();
		}
	}
	
	private void excluirSemImagem(){
		String[] listDirColeta = Constantes.DIRETORIO_PERFIL_INDETERMINADOS_CSV.list();
		String[] listDirImagens = Constantes.DIRETORIO_PERFIL_INDETERMINADOS_IMAGENS_ZOOM.list();
		
		for (String arquivo : listDirColeta) {
			String nomeDoArquivo = arquivo.split(Constantes.EXTENSAO_CSV)[0];						
			boolean arquivoEncontrado = false;
			
			for (int i = 0; i < listDirImagens.length; i++) {
				String nomeDaImagem = listDirImagens[i].split(Constantes.EXTENSAO_JPG)[0];
								
				if(nomeDoArquivo.startsWith("E") && nomeDoArquivo.equals(nomeDaImagem)){
					arquivoEncontrado = true;
					i = listDirImagens.length;
				}
			}
			
			if(nomeDoArquivo.startsWith("E") && arquivoEncontrado == false){
				removeItem(false, nomeDoArquivo);
			}
		}
	}

	public JTabbedPane getjTabbedPane() {
		if(jTabbedPane == null){
			jTabbedPane = new JTabbedPane();
			jTabbedPane.setBounds(new Rectangle(17, 200, 305, 240));
			jTabbedPane.addTab("Zoom", getLbImagemZoom());
			jTabbedPane.addTab("Pan 1", getLbImagemPan1());
			jTabbedPane.addTab("Pan 2", getLbImagemPan2());
			jTabbedPane.setForeground(Constantes.COR_AZUL_MARINHO);
		}
		
		return jTabbedPane;
	}
	
	private JTextField getTfPesquisar() {
		if (tfPesquisar == null) {
			tfPesquisar = new JTextField();
			tfPesquisar.setBounds(new Rectangle(700, 75, 322, 19));			
		}
		
		tfPesquisar.addMouseListener(new MouseListener() {	
			@Override
			public void mouseReleased(MouseEvent e) {	
				if(e.getButton() == e.BUTTON3){
					checkForTrigedEvent(e);
				}
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				if(e.getButton() == e.BUTTON3){
					checkForTrigedEvent(e);
				}
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				if(e.getButton() == e.BUTTON3){
					checkForTrigedEvent(e);
				}
			}
			
			private void checkForTrigedEvent(MouseEvent e){
				if(e.isPopupTrigger()){
					CAMPO_SELECIONADO = CAMPO_TF_PESQUISAR;
					
					jPopMenuColar = true;
					jPopMenuRecortar = true;
					jPopMenuCopiar = true;
					jPopMenuSelecionar = true;
					jPopMenuSalvarComo = false;
					
					getJPopupMenu().show(e.getComponent(), e.getX(), e.getY());
				}
			}
		});
		
		tfPesquisar.addKeyListener(new KeyListener() {				
			@Override
			public void keyTyped(KeyEvent e) {					
			}
			
			@Override
			public void keyReleased(KeyEvent e) {					
			}
			
			@Override
			public void keyPressed(KeyEvent e) {	
				if(e.getKeyCode() == KeyEvent.VK_ENTER){
					String nomeFluxo = tfPesquisar.getText().toUpperCase();
					
					int posicao = -1;
					DefaultListModel listModel = null;
					if(getRbTodos().isSelected()){
						if(model_todos != null){
							listModel = model_todos;
						}
					} else{
						if(model != null){
							listModel = model;
						}
					}
					
					tfPesquisar.setText(nomeFluxo.toUpperCase());
					
					if(listModel != null){
						posicao = Util.buscaBinaria(listModel, nomeFluxo);
						getJList().setModel(listModel);
						
						if(posicao != -1){
//							System.out.println(listModel.get(posicao).toString());
//							getJList().setSelectedIndex(posicao);
							getJList().setSelectedValue(listModel.get(posicao).toString(), true);
						}
						
//						mostraDadosEntradaRNA(nomeFluxo);
//						listarFluxoNorm(nomeFluxo);
//						listarFluxoOriginal(nomeFluxo);
//						mostraImagem(nomeFluxo);
//						plotaGrafico(nomeFluxo);
					}
				} 
			}
		});
		
		return tfPesquisar;
	}
	
	private void selecionaItemJList(String item, String textoNormalizado){
		if(textoNormalizado != null){
			getJList().setSelectedValue(textoNormalizado.toUpperCase(), true);
		}
		
		mostraDadosEntradaRNA(item);
		listarFluxoNorm(item);
		listarFluxoOriginal(item);
		mostraImagem(item);
		plotaGrafico(item);		
	}

	private JRadioButton getRbTodos() {
		if (rbTodos == null) {
			rbTodos = new JRadioButton();
			rbTodos.setBounds(new Rectangle(695, 11, 109, 21));
			rbTodos.setText(Strings.TEXT_LABEL_TODOS_SEE);
			rbTodos.setBackground(Color.WHITE);
			rbTodos.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					carregaDados(Strings.TEXT_LABEL_TODOS);
				}
			});
		}
		return rbTodos;
	}

	private JRadioButton getRbT() {
		if (rbT == null) {
			rbT = new JRadioButton();
			rbT.setBounds(new Rectangle(695, 40, 50, 21));
			rbT.setText(Strings.TEXT_LABEL_T);
			rbT.setBackground(Color.WHITE);
			rbT.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					carregaDados(Strings.TEXT_LABEL_T);
				}
			});
		}
		return rbT;
	}

	private JRadioButton getRbP() {
		if (rbP == null) {
			rbP = new JRadioButton();
			rbP.setBounds(new Rectangle(765, 40, 50, 21));
			rbP.setText(Strings.TEXT_LABEL_P);
			rbP.setBackground(Color.WHITE);
			rbP.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					carregaDados(Strings.TEXT_LABEL_P);
				}
			});
		}
		return rbP;
	}

	private JRadioButton getRbM() {
		if (rbM == null) {
			rbM = new JRadioButton();
			rbM.setBounds(new Rectangle(840, 40, 50, 21));
			rbM.setText(Strings.TEXT_LABEL_M);
			rbM.setBackground(Color.WHITE);
			rbM.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					carregaDados(Strings.TEXT_LABEL_M);
				}
			});
		}
		return rbM;
	}

	private JRadioButton getRbG() {
		if (rbC == null) {
			rbC = new JRadioButton();
			rbC.setBounds(new Rectangle(915, 40, 50, 21));
			rbC.setText(Strings.TEXT_LABEL_C);
			rbC.setBackground(Color.WHITE);
			rbC.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					carregaDados(Strings.TEXT_LABEL_G);
				}
			});
		}
		return rbC;
	}
	
	private JRadioButton getRbO() {
		if (rbO == null) {
			rbO = new JRadioButton();
			rbO.setBounds(new Rectangle(990, 40, 50, 21));
			rbO.setText(Strings.TEXT_LABEL_O);
			rbO.setBackground(Color.WHITE);
			rbO.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					carregaDados(Strings.TEXT_LABEL_O);
				}
			});
		}
		return rbO;
	}
	
	private void createButtonGroup(){
		ButtonGroup group = new ButtonGroup();
		group.add(getRbTodos());
		group.add(getRbT());
		group.add(getRbP());
		group.add(getRbM());
		group.add(getRbG());
		group.add(getRbO());
	}
	
	private JMenuItem getJMenuItemSalvarComo(){
		if(jMenuItemSalvarComo == null){
			jMenuItemSalvarComo = new JMenuItem();
			jMenuItemSalvarComo.setText(Strings.TEXT_LABEL_SELECIONAR);
			jMenuItemSalvarComo.addActionListener(new ActionListener() {			
				@Override
				public void actionPerformed(ActionEvent e) {
					switch (CAMPO_SELECIONADO) {
						case CAMPO_TF_PESQUISAR:
							
							break;
						case CAMPO_JLIST:
							
							break;
						case CAMPO_TA_ORIGINAL:
							jTextAreaOriginal.selectAll();
							
//							OperacoesArquivos.salvaDadosArquivoTexto(jTextAreaOriginal.getText(), nomeDoArquivo, false);
							break;
						case CAMPO_TA_NORMALIZADO:
							
							break;
						default:
							break;
					}					
				}
			});
		}
		
		return jMenuItemSalvarComo;
	}
	
	private JMenuItem getJMenuItemSelecionar(){
		if(jMenuItemSelecionar == null){
			jMenuItemSelecionar = new JMenuItem();
			jMenuItemSelecionar.setText(Strings.TEXT_LABEL_SELECIONAR);
			jMenuItemSelecionar.addActionListener(new ActionListener() {			
				@Override
				public void actionPerformed(ActionEvent e) {
					switch (CAMPO_SELECIONADO) {
						case CAMPO_TF_PESQUISAR:
							tfPesquisar.selectAll();
							break;
						case CAMPO_JLIST:
							
							break;
						case CAMPO_TA_ORIGINAL:
							
							break;
						case CAMPO_TA_NORMALIZADO:
							
							break;
						default:
							break;
					}					
				}
			});
		}
		
		return jMenuItemSelecionar;
	}
	
	private JMenuItem getJMenuItemCopiar(){
		if(jMenuItemCopiar == null){
			jMenuItemCopiar = new JMenuItem();
			jMenuItemCopiar.setText(Strings.TEXT_LABEL_COPIAR);
			jMenuItemCopiar.addActionListener(new ActionListener() {			
				@Override
				public void actionPerformed(ActionEvent e) {
					switch (CAMPO_SELECIONADO) {
						case CAMPO_TF_PESQUISAR:
							tfPesquisar.selectAll();
							tfPesquisar.copy();
							break;
						case CAMPO_JLIST:
							
							break;
						case CAMPO_TA_ORIGINAL:
							//eh pra estar no evento que chama!
							jPopMenuColar = false;
							jPopMenuRecortar = false;
							jPopMenuCopiar = true;
							jPopMenuSelecionar = true;
							
							jTextAreaOriginal.copy();
							break;
						case CAMPO_TA_NORMALIZADO:
							jTextAreaNorm.copy();
							break;
						default:
							break;
					}
				}
			});
		}
		
		return jMenuItemCopiar;
	}
	
	private JMenuItem getJMenuItemColar(){
		if(jMenuItemColar == null){
			jMenuItemColar = new JMenuItem();
			jMenuItemColar.setText(Strings.TEXT_LABEL_COLAR);
			jMenuItemColar.addActionListener(new ActionListener() {			
				@Override
				public void actionPerformed(ActionEvent e) {
					switch (CAMPO_SELECIONADO) {
						case CAMPO_TF_PESQUISAR:
							tfPesquisar.paste();
							break;
						case CAMPO_JLIST:
							
							break;
						case CAMPO_TA_ORIGINAL:
							
							break;
						case CAMPO_TA_NORMALIZADO:
							
							break;
						default:
							break;
					}
				}
			});
		}
		
		return jMenuItemColar;
	}
	
	private JMenuItem getJMenuItemRecortar(){
		if(jMenuItemRecortar == null){
			jMenuItemRecortar = new JMenuItem();		
			jMenuItemRecortar.setText(Strings.TEXT_LABEL_RECORTAR);
			jMenuItemRecortar.addActionListener(new ActionListener() {			
				@Override
				public void actionPerformed(ActionEvent e) {
					switch (CAMPO_SELECIONADO) {
						case CAMPO_TF_PESQUISAR:
							tfPesquisar.selectAll();
							tfPesquisar.cut();
							break;
						case CAMPO_JLIST:
							
							break;
						case CAMPO_TA_ORIGINAL:
							
							break;
						case CAMPO_TA_NORMALIZADO:
							
							break;
						default:
							break;
					}
				}
			});
		}
		
		return jMenuItemRecortar;
	}
	
	private JPopupMenu getJPopupMenu(){		
		if(jPopupMenu == null){
			jPopupMenu = new JPopupMenu();
		}
		
		jPopupMenu.removeAll();
		
		if(jPopMenuSelecionar){
			jPopupMenu.add(getJMenuItemSelecionar());
		} if(jPopMenuCopiar){
			jPopupMenu.add(getJMenuItemCopiar());
		} if(jPopMenuColar){
			jPopupMenu.add(getJMenuItemColar());
		} if(jPopMenuRecortar){
//			jPopupMenu.add(getJMenuItemRecortar());
		} if(jPopMenuSalvarComo){
//			jPopupMenu.add(getJMenuItemSalvarComo());
		} 
		
		jPopupMenu.setVisible(true);
		
		return jPopupMenu;
	}
}  //  @jve:decl-index=0:visual-constraint="10,10"
